package jp.aztech.android.kawasakiwelfare;

import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * いいねボタンの ImageView
 * ボタンが押されると、カウントアップする
 * モックアップなので、全ての写真で共通
 */
public class LikeView extends ImageView {
	private final static String TAG  = "LikeView";
	
	/* Preferences の項目名 */
	public static final String PREF_LIKE_COUNT = "like_count";

	/* Context */		
	private Context mContext;

	/* SharedPreferences */	
	private SharedPreferences mSharedPreferences;
		
	/* カウント数の TextView */	
	private TextView mTextViewCount;

	/* カウント数 */	
	private int count = 0;
		
	/* カウント数の表示形式 */	
	private String countFormat = null;

	/**
	 * ===コンストラクタ ===
	 */  
	public LikeView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		initView( context );
	}

	/**
	 * ===コンストラクタ ===
	 */ 	
	public LikeView(Context context, AttributeSet attrs) {
		super(context, attrs);
		initView( context );
	}

	/**
	 * ===コンストラクタ ===
	 */ 	        
	public LikeView(Context context ) {
     	super(context);
     	initView( context );
	}

	/**
	 * 初期設定：表示形式を取得する
	 */  
	private void initView(Context context ) {
     	mContext = context;
		mSharedPreferences = PreferenceManager.getDefaultSharedPreferences( context );
		countFormat = (String) context.getResources().getText( R.string.like_count );
	}

	/**
	 * カウント数の TextView を設定する
	 */ 
    public void setTextViewCount( TextView v ) {
		mTextViewCount = v;
	}

	/**
	 * カウント数を	Preferences から取得し、表示する
	 */ 
    public void start() {    
    	count = mSharedPreferences.getInt( PREF_LIKE_COUNT, 0 );
     	drawText();
	}

	/**
	 * === onTouchEvent ===
	 */     
	@Override 
    public boolean onTouchEvent(MotionEvent event) {
    	switch ( event.getAction() ) {
    		// downのとき、カウント数を更新し、表示する
        	case MotionEvent.ACTION_DOWN :
        		upCount();
        		drawText();
                break;        	
        	
        	case MotionEvent.ACTION_MOVE :
                break;
                
        	case MotionEvent.ACTION_UP :
                break;
		}           
        return true;
    }    	

	/**
	 * カウント数を更新し、Preferences に保存する
	 */  
	private void upCount() {
		count ++;
	    mSharedPreferences.edit().putInt( PREF_LIKE_COUNT, count ).commit();
	}

	/**
	 * カウント数を表示する
	 */  	
	private void drawText() {
		String s = String.format( countFormat , count );
	    mTextViewCount.setText( s );	
    } 
}